library(pacman)
p_load(readxl, dplyr, tidyr, ggplot2, ggthemes)

Pontos

dados <- read_excel("dados_tume.xlsx")

dados
## Source: local data frame [1,344 x 4]
## 
##    especie     h   dap   cod
##      (chr) (dbl) (dbl) (chr)
## 1       A1  15.5   8.1    NA
## 2       A1  21.2  12.3    NA
## 3       A1   7.5   6.4    11
## 4       A1   4.0   2.0    11
## 5       A1  18.0  12.3    NA
## 6       A1  16.0   9.1   X10
## 7       A1  16.0   8.8   X10
## 8       A1  20.0  13.1    NA
## 9       A1  21.5  15.5    NA
## 10      A1  21.0  14.1    NA
## ..     ...   ...   ...   ...
dados <- dados %>% 
  mutate(
    g = (pi/40000)*(dap^2),
    v = g*h*0.42
  )
dados
## Source: local data frame [1,344 x 6]
## 
##    especie     h   dap   cod            g            v
##      (chr) (dbl) (dbl) (chr)        (dbl)        (dbl)
## 1       A1  15.5   8.1    NA 0.0051529974 0.0335460127
## 2       A1  21.2  12.3    NA 0.0118822888 0.1057998996
## 3       A1   7.5   6.4    11 0.0032169909 0.0101335213
## 4       A1   4.0   2.0    11 0.0003141593 0.0005277876
## 5       A1  18.0  12.3    NA 0.0118822888 0.0898301034
## 6       A1  16.0   9.1   X10 0.0065038822 0.0437060883
## 7       A1  16.0   8.8   X10 0.0060821234 0.0408718691
## 8       A1  20.0  13.1    NA 0.0134782179 0.1132170302
## 9       A1  21.5  15.5    NA 0.0188691909 0.1703887936
## 10      A1  21.0  14.1    NA 0.0156145009 0.1377198978
## ..     ...   ...   ...   ...          ...          ...
ggplot(data = dados) +
  geom_point(aes(x = dap, y = h))

ggplot(data = dados) +
  geom_point(aes(x = dap, y = h, color = especie))

ggplot(data = dados) +
  geom_point(aes(x = dap, y = h, color = especie, size = v))

ggplot(data = dados) +
  geom_point(aes(x = dap, y = h, size = v)) +
  facet_wrap(~especie)

ggplot(dados, aes(dap, h, size = v)) +
  geom_point() +
  facet_wrap(~especie)

ggplot(data = dados) +
  geom_point(aes(x = dap, y = h, color = v)) +
  facet_wrap(~especie)

Boxplot

dados <- read_excel("base_vespa.xlsx")

dados
## Source: local data frame [140 x 17]
## 
##    Tratamento Individuo 1-Peciolo 1-Nervura 1-Caule 2-Peciolo 2-Nervura
##         (chr)     (dbl)     (dbl)     (dbl)   (dbl)     (dbl)     (dbl)
## 1   Actara d1         1         1        NA      NA         1         1
## 2   Actara d1         2        NA        NA      NA        NA        NA
## 3   Actara d1         3        NA        NA      NA        NA        NA
## 4   Actara d1         4        NA        NA      NA        NA        NA
## 5   Actara d1         5        NA        NA      NA        NA        NA
## 6   Actara d1         6        NA        NA      NA        NA        NA
## 7   Actara d1         7        NA        NA      NA         2        NA
## 8   Actara d1         8        NA        NA      NA        NA        NA
## 9   Actara d1         9        NA        NA      NA        NA        NA
## 10  Actara d1        10        NA        NA      NA        NA        NA
## ..        ...       ...       ...       ...     ...       ...       ...
## Variables not shown: 2-Caule (dbl), 3-Peciolo (dbl), 3-Nervura (dbl),
##   3-Caule (dbl), 4-Peciolo (dbl), 4-Nervura (dbl), 4-Caule (dbl),
##   5-Peciolo (dbl), 5-Nervura (dbl), 5-Caule (dbl)
dados <- read_excel("base_vespa.xlsx") %>% 
  gather("Local", "Galhas", 3:17) %>% 
  separate(Local, c("Coleta", "Local"))

Primeiro vamos processar os dados da última medição (Coleta 5) para verificar o nº total de galhas de cada tratamento, desconsiderando o local da galha. Nesse caso estou considerando apenas as mudas que foram atacadas e tiveram o desenvolvimento de galhas.

total <- dados %>%
  filter(Coleta == 5) %>%
  group_by(Tratamento, Individuo) %>%
  summarise(Galhas = sum(Galhas, na.rm=T)) %>%
  mutate(Galhas = replace(Galhas, Galhas == 0, NA))

total
## Source: local data frame [140 x 3]
## Groups: Tratamento [7]
## 
##    Tratamento Individuo Galhas
##         (chr)     (dbl)  (dbl)
## 1   Actara d1         1     11
## 2   Actara d1         2     NA
## 3   Actara d1         3      4
## 4   Actara d1         4     NA
## 5   Actara d1         5     NA
## 6   Actara d1         6     NA
## 7   Actara d1         7     30
## 8   Actara d1         8     NA
## 9   Actara d1         9     NA
## 10  Actara d1        10     NA
## ..        ...       ...    ...

O boxplot é um gráfico unidimensional, ou seja, precisamos de apenas uma variável para construí-lo. Entretanto, podemos usar variáveis categóricas para servir de agrupamento e replicar o gráfico para todos os níveis da variável. Por exemplo, no nosso banco de dados temos Galhas como variável quantitativa e Tratamento, Coleta e Local como variável qualitativa.

ggplot(total, aes("Total", Galhas)) +
  geom_boxplot() +
  theme_few()

A figura dá uma visão geral de todas as observações em um único boxplot, mas não nos explica muita coisa. A variável categórica nos permite subdividir os boxplots para todos os níveis de tratamentos e assim podemos compará-los.

ggplot(total, aes(Tratamento, Galhas)) +
  geom_boxplot() +
  theme_few()

Podemos também avaliar a variabilidade do nº de galhas por local. Para isso vamos incluir a variável Local no agrupamento.

local <- dados %>%
  filter(Coleta == 5) %>%
  group_by(Tratamento, Individuo, Local) %>%
  summarise(Galhas = sum(Galhas, na.rm=T)) %>%
  mutate(Galhas = replace(Galhas, Galhas == 0, NA))

local
## Source: local data frame [420 x 4]
## Groups: Tratamento, Individuo [140]
## 
##    Tratamento Individuo   Local Galhas
##         (chr)     (dbl)   (chr)  (dbl)
## 1   Actara d1         1   Caule      2
## 2   Actara d1         1 Nervura      3
## 3   Actara d1         1 Peciolo      6
## 4   Actara d1         2   Caule     NA
## 5   Actara d1         2 Nervura     NA
## 6   Actara d1         2 Peciolo     NA
## 7   Actara d1         3   Caule      1
## 8   Actara d1         3 Nervura      1
## 9   Actara d1         3 Peciolo      2
## 10  Actara d1         4   Caule     NA
## ..        ...       ...     ...    ...
  ggplot(local, aes(Tratamento, Galhas, fill = Local)) +
  geom_boxplot() +
  theme_few() +
  scale_fill_brewer(palette = "Spectral")

Uma outra perspectiva é avaliar a evolução do total de galhas por coleta. Para isto basta incluir a variável Coleta no agrupamento. Para facilitar a visualização, vou excluir a primeira coleta. Podemos ainda adicionar os pontos que representam as observações para poder identificar quantas observações tem cada tratamento.

total_coleta <- dados %>%
  filter(Coleta != 1 ) %>%
  group_by(Tratamento, Coleta, Individuo) %>%
  summarise(Galhas = sum(Galhas, na.rm=T)) %>%
  mutate(Galhas = replace(Galhas, Galhas == 0, NA))

total_coleta
## Source: local data frame [560 x 4]
## Groups: Tratamento, Coleta [28]
## 
##    Tratamento Coleta Individuo Galhas
##         (chr)  (chr)     (dbl)  (dbl)
## 1   Actara d1      2         1      3
## 2   Actara d1      2         2     NA
## 3   Actara d1      2         3     NA
## 4   Actara d1      2         4     NA
## 5   Actara d1      2         5     NA
## 6   Actara d1      2         6     NA
## 7   Actara d1      2         7      2
## 8   Actara d1      2         8     NA
## 9   Actara d1      2         9     NA
## 10  Actara d1      2        10     NA
## ..        ...    ...       ...    ...
ggplot(total_coleta, aes(Tratamento, Galhas)) +
  geom_boxplot() +
  #geom_jitter(alpha = 0.4) +
  facet_wrap(~ Coleta, labeller = label_both) +
  theme_few() +
  theme(axis.text.x = element_text(angle = 30, hjust = 0.5, vjust = 0.5))

Gráfico de barras

dados
## Source: local data frame [2,100 x 5]
## 
##    Tratamento Individuo Coleta   Local Galhas
##         (chr)     (dbl)  (chr)   (chr)  (dbl)
## 1   Actara d1         1      1 Peciolo      1
## 2   Actara d1         2      1 Peciolo     NA
## 3   Actara d1         3      1 Peciolo     NA
## 4   Actara d1         4      1 Peciolo     NA
## 5   Actara d1         5      1 Peciolo     NA
## 6   Actara d1         6      1 Peciolo     NA
## 7   Actara d1         7      1 Peciolo     NA
## 8   Actara d1         8      1 Peciolo     NA
## 9   Actara d1         9      1 Peciolo     NA
## 10  Actara d1        10      1 Peciolo     NA
## ..        ...       ...    ...     ...    ...

Básico

A primeira sequência de gráficos está relacionada ao total de galhas encontradas nas mudas de cada tratamento. Nessa comparação, temos de considerar tratamentos como fatores e os locais onde a galha foi encontrada como níveis. Essa distinção vai nos ajuda a escolher a melhor forma de construir um gráfico de acordo com o que queremos mostrar.

total_trat <- dados %>%
  filter(Coleta == 5) %>%
  group_by(Tratamento) %>%
  summarise(Galhas = sum(Galhas, na.rm=T))

total_trat
## Source: local data frame [7 x 2]
## 
##    Tratamento Galhas
##         (chr)  (dbl)
## 1   Actara d1     73
## 2   Actara d2     57
## 3   Actara d3     30
## 4 Evidence d1     27
## 5 Evidence d2     21
## 6 Evidence d3     12
## 7  Testemunha     77
ggplot(total_trat, aes(Tratamento, Galhas)) +
  geom_bar(stat = "identity") +
  theme_few()

Mas ainda temos a variável Local, certo? Podemos apresentá-la sem muito esforço.

total_trat_local <- dados %>%
  filter(Coleta == 5) %>%
  group_by(Tratamento, Local) %>%
  summarise(Galhas = sum(Galhas, na.rm=T))

total_trat_local
## Source: local data frame [21 x 3]
## Groups: Tratamento [?]
## 
##     Tratamento   Local Galhas
##          (chr)   (chr)  (dbl)
## 1    Actara d1   Caule     13
## 2    Actara d1 Nervura     19
## 3    Actara d1 Peciolo     41
## 4    Actara d2   Caule     10
## 5    Actara d2 Nervura      9
## 6    Actara d2 Peciolo     38
## 7    Actara d3   Caule      7
## 8    Actara d3 Nervura      6
## 9    Actara d3 Peciolo     17
## 10 Evidence d1   Caule      6
## ..         ...     ...    ...
ggplot(total_trat_local, aes(Tratamento, Galhas, fill = Local)) +
  geom_bar(stat = "identity") +
  theme_few() +
  scale_fill_brewer(palette = "Spectral")

Podemos dar mais evidência aos níveis, transformando-os em barras.

ggplot(total_trat_local, aes(Tratamento, Galhas, fill = Local)) +
  geom_bar(stat = "identity", position = "dodge") +
  theme_few() +
  scale_fill_brewer(palette = "Spectral")

Como alternativa, podemos subdividir os níveis em painéis e deixar o gráfico mais balanceado, ou seja, sem concentrar a informação em fatores ou níveis.

ggplot(total_trat_local, aes(Tratamento, Galhas )) +
  geom_bar(stat = "identity", position = "dodge") +
  facet_wrap(~Local) +
  theme_few() +
  theme(axis.text.x = element_text(angle = 30, hjust = 0.5, vjust = 0.5))

Note que nos 3 gráficos anteriores o banco de dados para formação do gráfico é o mesmo, mas cada um dá ênfase em um aspecto diferente. A parte boa é que podemos modificá-los de acordo com o nosso interesse de uma forma rápida e bem simples.

Adicionando valores às barras

Se quisermos adicionar o valor de cada nível ou fator na barra, temos de alterar o banco de dados para que ele coincida com o que queremos mostrar.

ggplot(total_trat, aes(Tratamento, Galhas)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = Galhas), vjust = -0.2) +
  theme_few()

Para a próxima figura temos de criar uma coluna que informa a posição em que o valor deve ficar no eixo y, uma vez que ele deve estar exatamente no centro do respectivo compartimento da barra.

total_trat_local_y <- total_trat_local %>%
  mutate(Galhas_y = replace(cumsum(Galhas) - (0.5*Galhas),
    Galhas  ==  0, NA))

ggplot(total_trat_local_y, aes(Tratamento, Galhas, fill = Local)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = Galhas, y = Galhas_y)) +
  theme_few() +
  scale_fill_brewer(palette = "Spectral")

ggplot(total_trat_local, aes(Tratamento, Galhas, fill = Local)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = Galhas),
    position = position_dodge(width=0.9), vjust = -0.2) +
  theme_few() +
  scale_fill_brewer(palette = "Spectral")

ggplot(total_trat_local, aes(Tratamento, Galhas )) +
  geom_bar(stat = "identity", position = "dodge") +
    geom_text(aes(label = Galhas), vjust = -0.2) +
  facet_wrap(~Local) +
  theme_few() +
  theme(axis.text.x = element_text(angle = 30, hjust = 0.5, vjust = 0.5))

Barra de desvio

Vamos resumir novamente os dados em função da média e acrescentar o erro padrão da média.

media_trat_desv <- dados %>%
  filter(Coleta == 5) %>%
  group_by(Tratamento) %>%
  summarise(desv = sd(Galhas, na.rm=T)/sqrt(n()),
    Galhas = mean(Galhas, na.rm=T))

media_trat_desv
## Source: local data frame [7 x 3]
## 
##    Tratamento      desv   Galhas
##         (chr)     (dbl)    (dbl)
## 1   Actara d1 0.4799351 4.055556
## 2   Actara d2 0.4893473 3.352941
## 3   Actara d3 0.1331730 2.307692
## 4 Evidence d1 0.5889188 3.857143
## 5 Evidence d2 0.2667039 2.625000
## 6 Evidence d3 0.1632993 2.000000
## 7  Testemunha 0.3601529 3.347826

Após criar o data frame com o desvio, vamos colocar a informação no gráfico.

ggplot(media_trat_desv, aes(Tratamento, Galhas)) +
  geom_bar(stat = "identity") +
  geom_errorbar(aes(ymin = Galhas - desv,
     ymax = Galhas + desv), width = 0.4) +
  theme_few()

media_trat_local_desv <- dados %>%
  filter(Coleta == 5) %>%
  group_by(Tratamento, Local) %>%
  summarise(desv = sd(Galhas, na.rm=T)/sqrt(n()),
    Galhas = median(Galhas, na.rm=T))

media_trat_local_desv
## Source: local data frame [21 x 4]
## Groups: Tratamento [?]
## 
##     Tratamento   Local      desv Galhas
##          (chr)   (chr)     (dbl)  (dbl)
## 1    Actara d1   Caule 0.3291403      2
## 2    Actara d1 Nervura 0.8276473      3
## 3    Actara d1 Peciolo 1.0200373      4
## 4    Actara d2   Caule 0.2708013      1
## 5    Actara d2 Nervura 0.2813657      2
## 6    Actara d2 Peciolo 1.1751393      4
## 7    Actara d3   Caule 0.1118034      2
## 8    Actara d3 Nervura 0.0000000      2
## 9    Actara d3 Peciolo 0.2972092      3
## 10 Evidence d1   Caule 0.2236068      2
## ..         ...     ...       ...    ...
ggplot(media_trat_local_desv, aes(Tratamento, Galhas, fill = Local)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_errorbar(aes(ymin = Galhas - desv, ymax = Galhas + desv),
    position = position_dodge(width=0.9), width = 0.4) +
  theme_few() +
  scale_fill_brewer(palette = "Spectral")

ggplot(media_trat_local_desv, aes(Tratamento, Galhas )) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_errorbar(aes(ymin = Galhas - desv,
    ymax = Galhas + desv), width = 0.4) +
  facet_wrap(~Local) +
  theme_few() +
  theme(axis.text.x = element_text(angle = 30, hjust = 0.5, vjust = 0.5))